package com.shareyi.baseproject.kernel.common.spi.conf;

import java.util.List;

/**
 * 配置信息接口
 *
 * @author lichao101
 * @date 2021/3/15
 */
public interface Settings {
    /**
     * 获取Integer类型的值
     *
     * @param key 配置项key
     * @return 不存在则返回null
     */
    Integer getInteger(String key);

    /**
     * 获取Integer类型的值
     *
     * @param key          配置项key
     * @param defaultValue 默认值
     * @return 不存在则返回defaultValue
     */
    Integer getInteger(String key, Integer defaultValue);

    /**
     * 获取String类型的值
     *
     * @param key 配置项key
     * @return 不存在则返回null
     */
    String getString(String key);

    /**
     * 获取String类型的值
     *
     * @param key          配置项key
     * @param defaultValue 默认值
     * @return 不存在则返回defaultValue
     */
    String getString(String key, String defaultValue);

    /**
     * 获取Double类型的值
     *
     * @param key 配置项key
     * @return 不存在则返回null
     */
    Double getDouble(String key);

    /**
     * 获取Double类型的值
     *
     * @param key          配置项key
     * @param defaultValue 默认值
     * @return 不存在则返回defaultValue
     */
    Double getDouble(String key, Double defaultValue);

    /**
     * 获取Long类型的值
     *
     * @param key 配置项key
     * @return 不存在则返回null
     */
    Long getLong(String key);

    /**
     * 获取Long类型的值
     *
     * @param key          配置项key
     * @param defaultValue 默认值
     * @return 不存在则返回defaultValue
     */
    Long getLong(String key, Long defaultValue);

    /**
     * 获取Boolean类型的值
     *
     * @param key 配置项key
     * @return 不存在则返回null
     */
    Boolean getBoolean(String key);

    /**
     * 获取Boolean类型的值
     *
     * @param key          配置项key
     * @param defaultValue 默认值
     * @return 不存在则返回defaultValue
     */
    Boolean getBoolean(String key, Boolean defaultValue);

    /**
     * 获取按分隔符分割后的值
     *
     * @param key       配置项key
     * @param separator 分隔符
     * @return
     */
    List<String> getWithSeparator(String key, String separator);

    /**
     * @param key
     * @param separator
     * @param defList
     * @return
     */
    List<String> getWithSeparator(String key, String separator, List<String> defList);


    /**
     * 获取指定类型对象
     *
     * @param key
     * @param clazz
     * @param <T>
     * @return
     */
    <T> T getObject(String key, Class<T> clazz);

    /**
     * 获取指定类型对象，默认值
     *
     * @param key
     * @param clazz
     * @param defValue
     * @param <T>
     * @return
     */
    <T> T getObject(String key, Class<T> clazz, T defValue);
}
